// 必须有序  基本思路：用两个指针，left指向最小元素位置，right指向数组最大元素位置
// 判断两个位置上的元素和目标值的关系，如果相等，返回元素位置，如果元素和大于目标值，让right右移
// 如果元素和小于目标值，rightleft右移，继续检测
// 最终仍没找到，返回 [-1, -1]

// 时间复杂度：O(N)
// 空间复杂度：O(1)

function twoSum(numbers, target) {
    numbers.sort((x,y) => x- y )
    let left = 0
    let right = numbers.length - 1
    while (left < right) {
        let total = numbers[left] + numbers[right]
        if (total === target) {
            return [left, right]
        } else if (total < target) {
            left += 1
        } else {
            right -= 1
        }
    }
    return [-1, -1]
}

// let arr = [1, 2, 3, 4, 5, 6, 7]
let arr = [3,2,4]
console.log(twoSum(arr, 6));

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum2 = function(nums, target) {
    let map = new Map();
    for(let i = 0; i < nums.length; i++) {
        if(map.has(target - nums[i])) {
            return [map.get(target - nums[i]), i]
        }
        map.set(nums[i], i)
    }
    return [-1, -1]
};
console.log(twoSum2(arr, 6));